package com.ssy.lingxi.after.sale.model.constant;

import com.ssy.lingxi.common.language.LanguageHolder;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * 退货申请外部状态枚举
 * @author 伍将
 * @date 2020/9/4
 * @version 2.0.0
 */
public enum ReturnGoodsOuterStatusEnum {

    /**
     * 所有
     */
    ALL(0, "所有"),
    /**
     * 待提交申请单 - 1
     */
    TO_BE_SUBMIT(1, "待提交申请单"),
    /**
     * 待确认申请单（已提交申请单） - 2
     */
    TO_BE_CONFIRM(2, "待确认申请单"),
    /**
     * 待平台确认申请单
     */
    TO_BE_PLATFORM_CONFIRM(21, "待平台确认申请单"),
    /**
     * 不接受申请（确认申请单） - 3
     */
    UN_ACCEPT_APPLY(3, "不接受申请"),
    /**
     * 接受申请（确认申请单） - 4
     */
    ACCEPT_APPLY(4, "接受申请"),
    /**
     * 待新增退货发货单（确认申请单后） - 5
     */
    TO_BE_ADD_RETURN_DELIVERY_GOODS(5, "待新增退货发货单"),
    /**
     * 采购商待新增物流单（新增换货发货单审核通过） - 6
     */
    CONSUMER_TO_BE_ADD_LOGISTICS(6, "待新增物流单"),
    /**
     * 待退货发货（新增物流单审核通过） - 7
     */
    TO_BE_RETURN_DELIVERY_GOODS(7, "待退货发货"),
    /**
     * 待新增退货入库单（已退货发货） - 8
     */
    TO_BE_ADD_RETURN_GOODS_STORAGE(8, "待新增退货入库单"),
    /**
     * 待退货收货（已新增换货入库单） - 9
     */
    TO_BE_RETURN_RECEIVE_GOODS(9, "待退货收货"),
    /**
     * 待确认退货回单（已换货收货） - 10
     */
    TO_BE_CONFIRM_RETURN_GOODS_RECEIPT(10, "待确认退货回单"),
    /**
     * 待退款(确认退货回单) - 11
     */
    TO_BE_REFUND(11, "待退款"),
    /**
     * 待确认退款(退款) - 12
     */
    TO_BE_CONFIRM_REFUND(12, "待确认退款结果"),
    /**
     * 确认退款未到账 - 13
     */
    CONFIRM_REFUND_FAIL(13, "确认退款未到账"),
    /**
     * 待确认售后完成(确认退款) - 14
     */
    TO_BE_CONFIRM_COMPLETE(14, "待确认售后完成"),
    /**
     * 售后完成 - 15
     */
    COMPLETE(15, "售后完成"),
    /**
     * 已中止 - 16
     */
    STOPPED(16, "已中止");


    private final Integer code;
    private final String message;


    ReturnGoodsOuterStatusEnum(Integer code, String message) {
        this.code = code;
        this.message = message;
    }

    public Integer getCode() {
        return code;
    }

    public String getMessage() {
        return LanguageHolder.getName(this.getDeclaringClass(), this.getCode());
    }

    public static String getMessage(Integer code) {
        return Arrays.stream(ReturnGoodsOuterStatusEnum.values()).filter(e -> e.getCode().equals(code)).findFirst().orElse(ALL).getMessage();
    }

    public static ReturnGoodsOuterStatusEnum getEnum(Integer code) {
        return Arrays.stream(ReturnGoodsOuterStatusEnum.values()).filter(e -> e.getCode().equals(code)).findFirst().orElse(ALL);
    }

    public static boolean isEnabledStop(Integer code) {
        List<Integer> codeList = Stream.of(UN_ACCEPT_APPLY, COMPLETE, STOPPED).map(ReturnGoodsOuterStatusEnum::getCode).collect(Collectors.toList());
        return !codeList.contains(code);
    }
}
